'''
实践问题Q&A：
一、Python编写程序，以实现生成100条不同用户数据，包含Name、Site、Email、PhoneNumber
要求：
（1）Site为不同国家所包含地名
（2）Email后缀为 .cn的git邮箱
   eg：xxxx@git.cn
 (3):生成不同国家的电话号码
（4）：写入excel文件

Tp思路：
 1、先去练习怎么使用faker生成姓名、地址、邮件和手机号等等
 2、熟练使用后批量创建，eg：for循环
 3、然后练习批量且不同的事，eg：可以使用dict or list存储不同国家的locale
 4、最后写入excle中，创建excel—>创建sheet—>创建表头（直接写入就行）
'''

from openpyxl import load_workbook
from openpyxl import Workbook
from faker import Faker
import time
import os
import random


# 定义不同国家的 locale
locales = ['en_US', 'fr_FR', 'de_DE', 'ja_JP', 'zh_CN', 'it_IT', 'es_ES']

fakers = Faker(locales)


# 创建excel文件
def create_excel(excel_file, sheet_name):
    if os.path.exists(excel_file):
        wb = Workbook(excel_file)
        wb.create_sheet(sheet_name)
        wb.save(excel_file)


# 创建将数据写入excel文件方法
def write_excel(excel_file, sheet_name, data):
    wb = load_workbook(excel_file)
    st = wb[sheet_name]
    # 添加数据前，将excel文件中的数据全部清除
    st.delete_rows(1, st.max_row)
    st.append(['name', 'site', 'email', 'phone_number'])
    for row in data:
        st.append(row)
    wb.save(excel_file)


# 创建个人信息
def create_person_information():
    locale = random.choice(locales)  # 利用random.choice随机拿列表里的元素
    fake = fakers[locale]
    name = fake.name()
    site = fake.address()
    username = fake.user_name()
    email = f'{username}@git.cn'
    phone_number = str(fake.phone_number())
    data = [name, site, email, phone_number]
    return data


# 定义excel文件名和sheet页名称
excel_file = '随机个人信息.xlsx'
sheet_name = 'faker创建'

# 定义一个空列表，用于存放个人信息
data_person = []
# 调用创建个人信息函数，创建100条个人信息
print('正在创建个人信息...')
time.sleep(2)
for i in range(100):
    data_person.append(create_person_information())

# 调用创建excel函数，创建新的excel文件
print('个人信息创建成功，开始创建excel表格...')
time.sleep(2)
create_excel(excel_file, sheet_name)
# 将创建好的个人数据传入excel
print('excel表格创建成功，开始传输数据...')
time.sleep(2)
write_excel(excel_file, sheet_name, data_person)
print('数据传输完成，全部进程结束！')
